const { app, BrowserWindow,Menu,Tray,ipcRenderer,ipcMain  } = require('electron')
const path = require('path');
let tray = null;
let win;
function createWindow () {   
    //去掉菜单
  Menu.setApplicationMenu(null)
  // 创建浏览器窗口
  win = new BrowserWindow({
    width: 1195,
    height: 810,
    frame: false,
    webPreferences: {
      nodeIntegration: true
    },
    resizable: false,
    hasShadow:true
  })

  // 并且为你的应用加载index.html
  win.loadFile('index.html')

  // 打开开发者工具
  // win.webContents.openDevTools()

  // 窗口关闭的监听  
  win.on('closed', (event) => {
    win = null;
  });
  // 当我们点击关闭时触发close事件，我们按照之前的思路在关闭时，隐藏窗口，隐藏任务栏窗口
  // event.preventDefault(); 禁止关闭行为(非常必要，因为我们并不是想要关闭窗口，所以需要禁止默认行为)
  win.on('close', (event) => { 
    win.hide(); 
    win.setSkipTaskbar(true);
    event.preventDefault();
  });
  win.on('show', () => {
    tray.setHighlightMode('always')
  })
  win.on('hide', () => {
    tray.setHighlightMode('never')
  })
  //创建系统通知区菜单
  tray = new Tray(path.join(__dirname, 'icon.ico'));
  const contextMenu = Menu.buildFromTemplate([
    {label: '退出', click: () => {win.destroy()}},//我们需要在这里有一个真正的退出（这里直接强制退出）
  ])
  tray.setToolTip('标特否”桌面壁纸')
  tray.setContextMenu(contextMenu)
  tray.on('click', ()=>{ //我们这里模拟桌面程序点击通知区图标实现打开关闭应用的功能
      win.isVisible() ? win.hide() : win.show()
      win.isVisible() ?win.setSkipTaskbar(false):win.setSkipTaskbar(true);
  })
  console.log(app.getLoginItemSettings().openAtLogin);
  if(app.getLoginItemSettings().openAtLogin){
    win.hide();
    win.setSkipTaskbar(true);
  }
}

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// 部分 API 在 ready 事件触发后才能使用。
// app.whenReady().then(createWindow)
const gotTheLock = app.requestSingleInstanceLock()
 
if (!gotTheLock) {
  app.quit()
} else {
  app.on('second-instance', (event, commandLine, workingDirectory) => {
    // 当运行第二个实例时,将会聚焦到myWindow这个窗口
    if (win) {
      if (!win.isVisible()) {
        win.show();
        win.setSkipTaskbar(false);
      }
      
      if (win.isMinimized()) win.restore()
      win.focus()
    }
  })
 
  // 创建 myWindow, 加载应用的其余部分, etc...
  app.on('ready', () => {
    createWindow();
  });
}

/**
 * 查看进程
 * var exec = require('child_process').exec;
exec('tasklist', function(err, stdout, stderr) {
  var lines = stdout.toString().split('\n');
  console.log(lines);
});
 */

// Quit when all windows are closed.
app.on('window-all-closed', () => {
  // 在 macOS 上，除非用户用 Cmd + Q 确定地退出，
  // 否则绝大部分应用及其菜单栏会保持激活。
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

app.on('activate', () => {
  // 在macOS上，当单击dock图标并且没有其他窗口打开时，
  // 通常在应用程序中重新创建一个窗口。
  if (BrowserWindow.getAllWindows().length === 0) {
    createWindow()
  }
})

ipcMain.on('min', e=> win.minimize());
ipcMain.on('max', e=> {
if (win.isMaximized()) {
  win.unmaximize()
} else {
  win.maximize()
}
});
ipcMain.on('close', e=> win.close());
//开机自启动
ipcMain.on('auto', (e,arg) => {
  /* 打包前的测试
  if(!app.isPackaged){
    app.setLoginItemSettings({
      openAtLogin: !arg,
      path: process.execPath
    })
  }else{
    app.setLoginItemSettings({
      openAtLogin: !arg
    })
  }*/
  app.setLoginItemSettings({
    openAtLogin: !arg
  })
  console.log('autoLogin args:' + !arg)
  console.log(app.getLoginItemSettings().openAtLogin)
  console.log(!app.isPackaged);
});
